package main

//依赖gin-contrib/sessions中间件处理session,支持多种数据库 以redis为例
import (
	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/redis"
	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	// 创建基于cookie的存储引擎，secret11111 参数是用于加密的密钥
	//store := cookie.NewStore([]byte("secret11111"))

	//size redis最大的空闲连接数
	//network 通信协议tcp或者udp
	//address redis地址
	//password redis密码
	//session加密秘钥
	store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret"))
	r.Use(sessions.Sessions("mysession", store)) // 设置session中间件

	r.GET("/incr", func(c *gin.Context) {
		session := sessions.Default(c) // 初始化session对象

		var count int
		// 通过session.Get读取session值 session是键值对格式数据，因此需要通过key查询数据
		v := session.Get("count")
		if v == nil {
			count = 0
		} else {
			count = v.(int)
			count++
		}
		session.Set("count", count)        // 设置session数据
		session.Save()                     // 保存session数据
		session.Delete("count")            // 删除session数据
		session.Clear()                    // 删除整个session
		c.JSON(200, gin.H{"count": count}) //count=0
	})
	r.Run(":8000")
}
